<?php
class PedidoController extends Controller {

	private $objRetorno;
	private $pedidoModel;
	private $restauranteModel;
	private $clienteModel;
	private $produtoModel;

	private $carrinho;
	public function __construct() {
		$this -> pedidoModel = new PedidoModel();
		$this -> restauranteModel = new RestauranteModel();
		$this -> clienteModel = new ClienteModel();
		$this -> produtoModel = new ProdutoModel();

		$pagina = Route::getRoutes(Uri::getUri(0));
		$pagina = (key_exists('pagina', $pagina)) ? $pagina['pagina'] : Uri::getUri(0);

		$this -> objRetorno['pagina'] = 'site/' . $pagina;
		$this -> objRetorno['head'] = 'site/head';
	}

	public function index() {
		$dados = Uri::getPOST();
		$usuario = Session::getValue('user');

		//busca o pedido
		$pedidoId = $dados['p_id'] ? $dados['p_id'] : 0;
		$pedidoModel = new PedidoModel();
		$pedido = $pedidoModel -> buscarPedidoPorId($pedidoId, $usuario['id_usuario'], session_id());
		if (!$pedido["id"]) {
			header("Location: /");
		}

		//busca endereco principal
		$enderecoModel = new EnderecoModel();
		$endereco = $enderecoModel -> buscarEnderecosPrincipal($usuario['id_usuario']);
		$endereco['telefone'] = Utils::formataTelefone($endereco['telefone']);

		//busca dados do restaurante
		$restauranteModel = new RestauranteModel();
		$restaurante = $restauranteModel -> select(array('id' => $pedido['id_restaurante']), NULL, TRUE);
		$restaurante['formasPagamento'] = $restauranteModel -> buscarFormasPagamento($pedido['id_restaurante']);
		$restaurante['vlr_minimo'] = Utils::formataMoeda($restaurante['vlr_minimo']);
    $pedido['taxa_entrega'] = $restaurante['taxa_entrega'];
		$restaurante['taxa_entrega'] = Utils::formataMoeda($restaurante['taxa_entrega']);
		$enderecoRestaurante = $enderecoModel -> buscarEnderecosPrincipal($pedido['id_restaurante'], 'r');
		$enderecoRestaurante['telefone'] = Utils::formataTelefone($enderecoRestaurante['telefone']);
		$restaurante['end'] = $enderecoRestaurante;

		//busca dados dos produtos
		$totalPedido = 0;
		
		$produtos = $pedidoModel -> buscarProdutosPorPedido($pedidoId);
		foreach ($produtos as &$p) {
			$p['variacoes'] = $pedidoModel -> buscarVariacoesPorProdutoPedido($p['id_produto_pedido']);
			$totalPedido += $p['preco'];
			$p['preco'] = Utils::formataMoeda($p['preco']);
		}
		$pedido['preco'] = $totalPedido;

		//retorno à página
		$this -> objRetorno['logged'] = $usuario ? 1 : 0;
		$this -> objRetorno['pedido'] = $pedido;
		$this -> objRetorno['endereco'] = $endereco;
		$this -> objRetorno['restaurante'] = $restaurante;
		$this -> objRetorno['produtos'] = $produtos;

		self::render('site/home', $this -> objRetorno);
	}

	public function buscarPedido() {
		// Recupera os dados do usuario logado
		$user = Session::getValue('user');

		//Pego o restaurante pelo id do usuario
		$restaurante = $this -> restauranteModel -> getRestaurantePorUsuario($user['id']);
		$pedidos = $this -> pedidoModel -> buscarPedidoPorRestaurante($restaurante['id']);
		$pedidos = is_null($pedidos) ? array() : $pedidos;
			
		$maiorId = $pedidos[count($pedidos) - 1]['id'];

		$dados = array('restaurante' => $restaurante, 'rows' => $pedidos, 'total' => count($pedidos), 'maiorId' => $maiorId);

		echo json_encode($dados);
	}

	public function buscarNovosPedidos() {
		$args = Uri::getPOST('json');

		$user = Session::getValue('user');

		//Pego o restaurante pelo id do usuario
		$restaurante = $this -> restauranteModel -> getRestaurantePorUsuario($user['id']);
		$pedidos = $this -> pedidoModel -> buscarPedidoPorRestaurante($restaurante['id'], $args -> id);

		$maiorId = $pedidos[count($pedidos) - 1]['id'];

		$dados = array('restaurante' => $restaurante, 'rows' => $pedidos, 'total' => count($pedidos), 'maiorId' => $maiorId);

		echo json_encode($dados);
	}

	public function verPedido() {
		$args = Uri::getPOST('json');
		$id = $args -> id;
		// Recupera os dados do usuario logado
		$user = Session::getValue('user');

		$pedido = $this -> pedidoModel -> buscarPedidoPorId($id);

		$restaurante = $this -> restauranteModel -> getRestaurantePorUsuario($user['id']);
		$cliente = $this -> clienteModel -> buscarClientePorId($pedido['id_cliente']);
		$produto = $this -> produtoModel -> buscarProdutoPorPedido($id);

		$dados = array();
		$dados['pedido'] = $pedido;
		$dados['restaurante'] = $restaurante;
		$dados['cliente'] = $cliente;
		$dados['produto'] = $produto;
		
		//echo '<pre>';print_r($dados);

		$html = $this -> render('administrador/pedido_view_restaurante', $dados, TRUE);

		echo json_encode(array('html' => $html));
	}

	public function enviarPedido() {
		$dados = Uri::getPOST('json');
		$usuario = Session::getValue('user');
		$pedido = array('id_forma_pagamento' => $dados -> forma_pagamento, 'qtde_troco' => $dados -> troco == '' ? 0 : $dados -> troco, 'retirada' => $dados -> retirada, 'taxa_entrega' => 0, 'id_pedido' => $dados -> p_id, 'id_cliente' => $usuario['id_usuario'], 'id_restaurante' => $dados -> r_id, 'session_id' => session_id());
		$pedidoModel = new PedidoModel();
		try {
			$ret = $pedidoModel -> enviarPedido($pedido);
			if ($ret) {
				echo $pedido['id_pedido'];
			} else {
				echo 0;
			}
		} catch(Exception $err) {
			echo json_encode($err);
		}
	}
	
	public function AtualizarStatus(){
		$dados = Uri::getPOST('json');
		$this->pedidoModel->alteraStatus($dados);
	}

}
?>